package br.com.pontoe.model.persistencia;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

import br.com.pontoe.model.conexao.Conexao;
import br.com.pontoe.model.entidades.Estado;

/**
 * DAO para a entidade Estado
 * 
 * @author Cleison
 * @version 1.0
 * @since 07/05/2010
 */
public class EstadoDAO implements DAOInterface<Estado> {

	private StringBuilder sql = new StringBuilder();
	private Connection con = null;
	private PreparedStatement stm = null;
	
	
	@Override
	public int adicionar(Estado entidade) throws SQLException {
		int ret = -1;
		
		try {
			sql = new StringBuilder();
			sql.append("INSERT INTO ESTADO (IDESTADO, NOME, UF) ");
			sql.append("VALUES (NULL, \'?\', ?)");
			
			con = Conexao.getInstance().getConnection();
			stm = (PreparedStatement) con.prepareStatement(sql.toString());
			
			stm.setString(1, entidade.getNome());
			stm.setString(2, entidade.getUf());
			
			ret = stm.executeUpdate();
		}
		finally {
			stm.close();
			con.close();
		}
		return ret;
	}

	@Override
	public boolean atualizar(Estado entidade) throws SQLException {
		boolean ret = true;
		
		try {
			sql = new StringBuilder();
			sql.append("UPDADE ESTADO ");
			sql.append("SET   NOME = \'?\', UF = \'?\' ");
			sql.append("WHERE IDESTADO = ? ");
			
			con = Conexao.getInstance().getConnection();
			stm = (PreparedStatement) con.prepareStatement(sql.toString());
			
			stm.setString(1, entidade.getNome());
			stm.setString(2, entidade.getUf());
			stm.setInt(3, entidade.getId());
			
			ret = stm.execute();
		}
		finally {
			stm.close();
			con.close();
		}
		return ret;
	}

	@Override
	public Estado localizar(int id) throws SQLException {
		Estado ret = null;
		
		try {
			sql = new StringBuilder();
			sql.append("SELECT IDESTADO, NOME, UF ");
			sql.append("FROM   ESTADO ");
			sql.append("WHERE  IDESTADO = ? ");
			
			con = Conexao.getInstance().getConnection();
			stm = (PreparedStatement) con.prepareStatement(sql.toString());
			
			stm.setInt(1, id);
			
			ResultSet temp = stm.executeQuery();  
			if(temp.next()) {
				ret = new Estado();
				ret.setId(temp.getInt("IDESTADO"));
				ret.setNome(temp.getString("NOME"));
				ret.setUf(temp.getString("UF"));
			}
			temp.close();
		}
		finally {
			stm.close();
			con.close();
		}
		return ret;
	}

	@Override
	public List<Estado> localizarTodos() throws SQLException {
		List<Estado> ret = new ArrayList<Estado>();
		
		try {
			sql = new StringBuilder();
			sql.append("SELECT IDESTADO, NOME, UF ");
			sql.append("FROM   ESTADO ");
			
			con = Conexao.getInstance().getConnection();
			stm = (PreparedStatement) con.prepareStatement(sql.toString());
			
			ResultSet temp = stm.executeQuery(); 
			
			while(temp.next()) {
				Estado e = new Estado();
				e.setId(temp.getInt("IDESTADO"));
				e.setNome(temp.getString("NOME"));
				e.setUf(temp.getString("UF"));
				ret.add(e);
			}
			temp.close();
		}
		finally {
			stm.close();
			con.close();
		}
		return ret;
	}

	@Override
	public boolean remover(Estado entidade) throws SQLException {
		boolean ret = true;
		
		try {
			sql = new StringBuilder();
			sql.append("DELETE FROM ESTADO ");
			sql.append("WHERE IDESTADO = ? ");
			
			con = Conexao.getInstance().getConnection();
			stm = (PreparedStatement) con.prepareStatement(sql.toString());

			stm.setInt(1, entidade.getId());
			
			ret = stm.execute();
		}
		finally {
			stm.close();
			con.close();
		}
		return ret;
	}

}
